Most computers available today employ an architecture in which their instructions are stored in memory. A processor fetches each instruction from a memory location at an address which is stored in a register which is incremented after each fetch cycle. Some instructions often referred to as "jump" instructions alter the contents of this address register and thereby cause the next instruction to be fetched from the new address. When power is first applied instructions are fetched beginning at a fixed address known as the "reset vector." Non-volatile memory is commonly used to store program code for use when power is turned on. For a device to be suitable for this purpose it must be capable of decoding an address input and responding with the selected memory contents within the time constraints of the processor. A desirable feature of a non-volatile memory device is its ability to be erased and re-programmed within the system in which it resides.
Many non-volatile memory devices have been developed to serve as program code storage for use when power is turned on. As computer systems have become more complex the demand for faster, more compact and higher capacity non-volatile memory devices has increased. Typically as the capacities of the devices has increased the numbers of pins on the device packages has increased to accomodate the additional addressing requirement.
More recently non-volatile memory devices have been introduced which have high density, a reduced number of pins, and are electrically erasable and re-programmable; however, in order to function with fewer pins these devices use internal address registers, and the address and data inputs share a set of pins. To use these devices the system must issue command and address inputs to the device, wait for the device to signal that it is "ready", and then write or read the memory contents serially in small blocks. A memory element cannot be accessed randomly in a single bus cycle. The reduced pin count and greater density makes these devices less expensive to manufacture than random access non-volatile memory devices with the same capacity. The variable nature of the amount of time required to access the device as well as the device's requirement of receiving initialization commands has caused it to be considered unsuitable for program code storage for use directly by a microprocessor.